﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace BankingService
{
    public static class MyUtility
    {
        private static DongABankDataContext context = new DongABankDataContext();

        //Kiểm tra xem tài khoản người dùng WEB có tồn tại hay không?
        public static bool ThuocTaiKhoanWeb(String username, String password)
        {
            var all = from row in context.TaiKhoanWebs
                      where (row.HoTenDK.Equals(username) && row.MatKhau.Equals(password))
                      select row;

            foreach (TaiKhoanWeb i in all)
                return true;

            return false;
        }

        //Kiểm tra xem tài khoản Ngân Hàng Liên Minh có tồn tại hay không?
        public static bool ThuocTaiKhoanNganHangLienMinh(String username, String password)
        {
            var all = from row in context.TKLienMinhs
                      where (row.MaGiaoDich.Equals(username) && row.MatKhau.Equals(password))
                      select row;

            foreach (TKLienMinh i in all)
                return true;

            return false;
        }

        //Nhập vào mã tài khoản ngân hàng (MaGiaoDich + SoTaiKhoan), và lấy ra mã (giao dịch) ngân hàng mà tài khoản đó thuộc về
        //maTaiKhoanNganHang: DAB1234567891012121
        public static String LayMaGiaoDichCuaNganHang(String maTaiKhoanNganHang)
        {
            String BankingCode = "";

            foreach (char c in maTaiKhoanNganHang)
            {
                //48(=0) <= c <= 57 (=9)
                if (c >= 48 && c <= 57)
                    break;

                BankingCode += c;
            }

            return BankingCode;
        }

        //Kiểm tra tài khoản ngân hàng thuộc ngân hàng Đông Á có tồn tại hay không
        //maTaiKhoanNganHang: DAB1234567891012121
        public static bool CoTaiKhoanNganHang(String maTaiKhoanNganHang)
        {
            var all = from row in context.TaiKhoanNganHangs where row.MaTaiKhoan.Equals(maTaiKhoanNganHang) select row;

            foreach (TaiKhoanNganHang TK in all)
                return true;

            return false;
        }

        //Kiểm tra xem ngân hàng mà một tài khoản ngân hàng nào đó thuộc về có nằm trong liên minh hay không?
        //maGiaoDichCuaNganHang: DAB, TCB, ...
        public static bool ThuocLienMinhNganHang(String maGiaoDich)
        {
            //String maGiaoDich = MyUtility.LayMaGiaoDichCuaNganHang(LBankId);
            var all = from row in context.TKLienMinhs where row.MaGiaoDich.Equals(maGiaoDich) select row;

            foreach (TKLienMinh TK in all)
                return true;

            return false;
        }

        //Kiểm tra SID_NGANHANG còn sử dụng được hay không?
        public static bool KiemTraSIDNganHang(String strSID)
        {
            var all = from row in context.SID_NganHangs where row.sid.Equals(strSID) select row;
            foreach (SID_NganHang i in all)
                return true;

            return false;
        }
        //Hủy SID_NGANHANG sau khi đã giao dịch 1 lần thành công
        public static void HuySIDNganHang(String strSID)
        {
            var all = from row in context.SID_NganHangs where row.sid.Equals(strSID) select row;

            foreach (SID_NganHang i in all)
                context.SID_NganHangs.DeleteOnSubmit(i);

            try
            {
                context.SubmitChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        //Kiểm tra SID_KHACHHANG còn sử dụng được hay không?
        public static bool KiemTraSIDKhachHang(String strSID)
        {
            var all = from row in context.SID_KhachHangs where row.sid.Equals(strSID) select row;
            foreach (SID_KhachHang i in all)
                return true;

            return false;
        }
        //Hủy SID_KHACHHANG sau khi đã giao dịch 1 lần thành công
        public static void HuySIDKhachHang(String strSID)
        {
            var all = from row in context.SID_KhachHangs where row.sid.Equals(strSID) select row;

            foreach (SID_KhachHang i in all)
                context.SID_KhachHangs.DeleteOnSubmit(i);

            try
            {
                context.SubmitChanges();
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
        }
        //Kiểm tra tài khoản thẻ thanh toán quốc tế có tồn tại hay không?
        public static bool KiemTraTheThanhToanQuocTe(String maSoTaiKhoan)
        {
            var all = from row in context.TaiKhoanTinDungs where row.MaThe.Equals(maSoTaiKhoan) select row;

            foreach (TaiKhoanTinDung i in all)
                return true;

            return false;
        }
        //Kiểm tra tài khoản thẻ ATM có tồn tại hay không?
        public static bool KiemTraTheATM(String maSoTaiKhoan)
        {
            var all = from row in context.TaiKhoanATMs where row.MaThe.Equals(maSoTaiKhoan) select row;

            foreach (TaiKhoanATM i in all)
                return true;

            return false;
        }

        //Hàm phát sinh chuỗi số ngẫu nhiên có chiều dài = length
        public static String PhatSinhChuoiSoNgauNhien(int length)
        {
            //tạo mới một mảng các ký tự sẽ được chứa trong chuỗi
            char[] MangKyTu = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9' };

            //tạo một chuỗi ngẫu nhiên
            Random fr = new Random();
            string chuoi = "";

            for (int i = 0; i < length; i++)
            {
                int t = fr.Next(0, MangKyTu.Length);
                chuoi = chuoi + MangKyTu[t];
            }

            return chuoi;
        }

        //Hàm phát sinh 1 tài khoản ngân hàng(bắt đầu bằng : "DAB970406") rồi ghi xuống CSDL
        //nếu phát sinh 100 lần mà vẫn không ghi được xuống CSDl(vì trùng MaTaiKhoan) thì trả về false(báo lỗi)
        public static String PhatSinhTaiKhoanNganHang()
        {
            int dem = 0;
 
            tt: dem++;
            DongABankDataContext context = new DongABankDataContext();
 
            if (dem > 100)
                return null;
            TaiKhoanNganHang tk = new TaiKhoanNganHang
            {
                MaTaiKhoan = "DAB970406" + PhatSinhChuoiSoNgauNhien(10),
                SoDu = 0,
                MaTienTe = "VND"
            };
            context.TaiKhoanNganHangs.InsertOnSubmit(tk);

            try
            {
                context.SubmitChanges();

            }
            catch (Exception ex)
            {
                context.Dispose();
                goto tt;
            }

            return tk.MaTaiKhoan;
        }
    }
}
